package com.adinnet.common.jpush;

import com.adinnet.common.utils.PropertiesConfig;
import com.adinnet.common.utils.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Service
public class PushService {
    private static final Logger log = LoggerFactory.getLogger(PushService.class);
    /**
     * 一次推送最大数量 (极光限制1000)
     */
    private static final int max_size = 999;


    /**
     * 推送全部, 不支持附加信息
     *
     * @return
     * @author YangJie [2016年6月17日 下午5:17:45]
     */
    public boolean pushAll(PushBean pushBean) {
        return new JPushService().pushAll(pushBean);
    }

    /**
     * 推送全部ios
     *
     * @return
     * @author YangJie [2016年6月17日 下午5:18:22]
     */
    public boolean pushIos(PushBean pushBean) {
        return new JPushService().pushIos(pushBean);
    }

    /**
     * 推送ios 指定id
     *
     * @return
     * @author YangJie [2016年6月17日 下午5:18:22]
     */
    public static boolean pushIos(Boolean env,PushBean pushBean, String... registids) {
        registids = checkRegistids(registids); // 剔除无效registed
        while (registids.length > max_size) { // 每次推送max_size个
            new JPushService().pushIos(env,pushBean, Arrays.copyOfRange(registids, 0, max_size));
            registids = Arrays.copyOfRange(registids, max_size, registids.length);
        }
        return new JPushService().pushIos(env,pushBean, registids);
    }

    /**
     * 推送全部android
     *
     * @return
     * @author YangJie [2016年6月17日 下午5:18:30]
     */
    public boolean pushAndroid(PushBean pushBean) {
        return new JPushService().pushAndroid(pushBean);
    }

    /**
     * 推送android 指定id
     *
     * @return
     * @author YangJie [2016年6月17日 下午5:18:30]
     */
    public static boolean pushAndroid(Boolean env,PushBean pushBean, String... registids) {
        registids = checkRegistids(registids); // 剔除无效registed
        while (registids.length > max_size) { // 每次推送max_size个
            new JPushService().pushAndroid(env,pushBean, Arrays.copyOfRange(registids, 0, max_size));
            registids = Arrays.copyOfRange(registids, max_size, registids.length);
        }
        return new JPushService().pushAndroid(env,pushBean, registids);
    }

    /**
     * 剔除无效registed
     *
     * @param registids
     * @return
     * @author YangJie [2016年7月15日 下午4:03:31]
     */
    private static String[] checkRegistids(String[] registids) {
        List<String> regList = new ArrayList<String>(registids.length);
        for (String registid : registids) {
            if (registid != null && !"".equals(registid.trim())) {
                regList.add(registid);
            }
        }
        return regList.toArray(new String[0]);
    }

    /**
     * 推送消息 Android/IOS
     *
     * @param registid     推送唯一标识
     * @param title        标题
     * @param contents     推送内容
     * @return
     */
    public void pushSend(String registid, String title, String contents,Boolean env) {
        PushBean pushBean = new PushBean();
        pushBean.setAppKey(PropertiesConfig.pushAppKey);
        pushBean.setMasterSecret(PropertiesConfig.pushSecret);
        pushBean.setAlert(contents);
        pushBean.setTitle(title);
        pushBean.setExtras(null);
        if(!StringUtil.isBlank(registid)) {
            log.info("\n推送消息\n标识    %s\n标题    %s\n内容    %s\n",registid,title,contents);
            pushAndroid(env, pushBean, registid);
            pushIos(env, pushBean, registid);
        }
    }

    /**
     * 安卓极光推送
     * @param registid 设备在极光注册的id
     * @param title
     * @param contents
     */
    public static void pushSendAndroid(String registid, String title, String contents) {
        PushBean pushBean = new PushBean();
        pushBean.setAppKey(PropertiesConfig.pushAppKey);
        pushBean.setMasterSecret(PropertiesConfig.pushSecret);
        pushBean.setAlert(contents);
        pushBean.setTitle(title);
        pushBean.setExtras(null);
        if(!StringUtil.isBlank(registid)){
            log.info("\n推送消息\n标识    %s\n标题    %s\n内容    %s\n",registid,title,contents);
            pushAndroid(false,pushBean, registid.split(","));
        }
//        pushIos(false,pushBean, registid);
    }
}
